home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / netBoot.OpenProm / boot.c < prev    next >
C/C++ Source or Header  |  1991-01-13  |  4KB  |  189 lines

  1. /*-
  2.  * boot.c --
  3.  *    Some PROM version specific functions which were too
  4.  *    complicated to be macros.
  5.  *
  6.  * Copyright (c) 1987 by the Regents of the University of California
  7.  *
  8.  * Permission to use, copy, modify, and distribute this
  9.  * software and its documentation for any purpose and without
  10.  * fee is hereby granted, provided that the above copyright
  11.  * notice appear in all copies.  The University of California
  12.  * makes no representations about the suitability of this
  13.  * software for any purpose.  It is provided "as is" without
  14.  * express or implied warranty.
  15.  *
  16.  *
  17.  */
  18. #ifndef lint
  19. static char rcsid[] =
  20. "$Header: /sprite/src/boot/netBoot.OpenProm/RCS/boot.c,v 1.2 91/01/13 02:26:28 dlong Exp $ SPRITE (Berkeley)";
  21. #endif lint
  22.  
  23. #include "boot.h"
  24. #include <string.h>
  25. #include <ctype.h>
  26.  
  27. #define min(x,y)    ((x) < (y) ? (x) : (y))
  28.  
  29.  
  30. /*
  31.  *----------------------------------------------------------------------
  32.  *
  33.  * PrintBootCommand --
  34.  *
  35.  *    Print out the boot command, as expanded by PROM defaults.
  36.  *
  37.  * Results:
  38.  *    None.
  39.  *
  40.  * Side effects:
  41.  *    None.
  42.  *
  43.  *----------------------------------------------------------------------
  44.  */
  45.  
  46. void
  47. PrintBootCommand()
  48. {
  49.     int i;
  50.  
  51.     if (RomVersion >= 2) {
  52.     printf("%s %s\n", *romp->bootpath, *romp->bootargs);
  53.     } else if (romp->v_bootparam) {
  54.     i = 0;
  55.     while ((*romp->v_bootparam)->bp_argv[i]) {
  56.         printf("%s ", (*romp->v_bootparam)->bp_argv[i]);
  57.         ++i;
  58.     }
  59.     printf("\n");
  60.     } else {
  61.     printf("(NULL)\n");
  62.     }
  63.  
  64. }
  65.  
  66.  
  67. /*
  68.  *----------------------------------------------------------------------
  69.  *
  70.  * BootDevName --
  71.  *
  72.  *    Get boot device name from PROM data structures.
  73.  *
  74.  * Results:
  75.  *    Pointer to static character buffer, or string in PROM.
  76.  *
  77.  * Side effects:
  78.  *    None.
  79.  *
  80.  *----------------------------------------------------------------------
  81.  */
  82.  
  83. char *
  84. BootDevName()
  85. {
  86.     static char buf[64];
  87.     char *p, *q;
  88.     int n;
  89.  
  90.     if (RomVersion >= 2) {
  91.     /*
  92.      * With ROM version 2, bootpath contains the path of the
  93.      * boot device.  The dev(ctrl,unit,part) style is no
  94.      * longer fully supported.  v_bootparam is not filled
  95.      * in.
  96.      */
  97.     return *romp->bootpath;
  98.     } else {
  99.     /*
  100.      * With older ROM versions, v_bootparam is filled in,
  101.      * and bp_argv[0] contains the name of the boot device.
  102.      * It looks like: dev(ctrl,unit,part)filename.
  103.      * The filename may not be stripped off the end, so
  104.      * do it here, even though v_open doesn't care.
  105.      */
  106.     p = (*romp->v_bootparam)->bp_argv[0];
  107.     q = strchr(p, ')');
  108.     if (q) {
  109.         n = min(q - p + 1, sizeof buf - 1);
  110.         strncpy(buf, p, n);
  111.         return buf;
  112.     } else {
  113.         return p;
  114.     }
  115.     }
  116. }
  117.  
  118.  
  119. /*
  120.  *----------------------------------------------------------------------
  121.  *
  122.  * BootFileName --
  123.  *
  124.  *    Get boot file name from PROM data structures.
  125.  *
  126.  * Results:
  127.  *    Pointer to static character buffer, or string in PROM.
  128.  *
  129.  * Side effects:
  130.  *    None.
  131.  *
  132.  *----------------------------------------------------------------------
  133.  */
  134.  
  135. char *
  136. BootFileName()
  137. {
  138.     static char buf[64];
  139.     char *p, *q;
  140.  
  141.     if (RomVersion >= 2) {
  142.     /*
  143.      * bootargs contains the filename and arguments.
  144.      * Just copy the filename here; ignore arguments.
  145.      */
  146.     p = buf;
  147.     q = *romp->bootargs;
  148.     while (*q && !isspace(*q)) {
  149.         *p++ = *q++;
  150.     }
  151.     *p = '\0';
  152.     return buf;
  153.     } else {
  154.     /*
  155.      * bp_name contains the filename without arguments.
  156.      */
  157.     return ((*romp->v_bootparam)->bp_name);
  158.     }
  159. }
  160.  
  161.  
  162. /*
  163.  *----------------------------------------------------------------------
  164.  *
  165.  * Routine --
  166.  *
  167.  *    Print out panic strings, and return to monitor.
  168.  *
  169.  * Results:
  170.  *    None.
  171.  *
  172.  * Side effects:
  173.  *    Should not return.  Aborts to the monitor.
  174.  *
  175.  *----------------------------------------------------------------------
  176.  */
  177.  
  178. void panic(string)
  179.     char *string;
  180. {
  181.     printf("Panic: %s\n", string);
  182.     /*
  183.      * This could be (*romp->v_exit_to_mon)() I guess.
  184.      * What is the difference?  This one is what L1-a does,
  185.      * I think.
  186.      */
  187.     (*romp->v_abortent)();
  188. }
  189.